/**
 * Time：2024.04.28
 * Content：异步并发
 * Author：Qian You
 */
#include <iostream>
#include <bits/stdc++.h>
// 头文件
#include <thread>
using namespace std;

int func()
{
    int a = 0;
    for (int i = 0; i < 1000; i++)
    {
        a++;
    }
    return a;
}

void funcPro(promise<int> &f)
{
    f.set_value(100);
}

int main()
{
    // async和future的使用
    // 异步，在后台运行func，不阻塞
    // future<int> future_res = async(launch::async, func);
    // cout << func() << endl;
    // 如果get的时候，还没执行完 会阻塞，直到获取到结果
    // cout << future_res.get() << endl;

    // packaged_task用法
    // packaged_task<int()> task(func); // 把函数封装成packaged_task对象
    // auto future_res = task.get_future();
    // thread t1(move(task)); // 需要手动开启线程，task需要使用移动语义
    // cout << func() << endl;
    // t1.join();
    // cout << future_res.get() << endl;

    // promise用法
    promise<int> f;
    future<int> future_res = f.get_future();
    thread t1(funcPro, ref(f));
    t1.join();
    cout << future_res.get() << endl;

    return 0;
}